用資料分片來提升系統能負載的頻寬需求。壞人想偷藏資料又不能懲罰?沒關係,那我們幫他備份資料。
以捲為尊的升級路線裡面,為了提高第二層系統的負載能力,第一層的系統要想辦法解放更多的頻寬來讓第二層用。
這邊的頻寬是網路頻寬。當全節點要下載一個區塊時,必須透過網路線把區塊攜帶的資料下載下來,才有後續的驗證可言。
但現在的光纖和硬體設施就是固定的,要哪來解放出更多頻寬呢?
實際上,捲要使用的頻寬,或資料,在以太坊的圈子裡有個詞: Data availability ,簡稱 DA。
中文常譯做:資料可得性,或資料可用性
但實際上英文的詞就已經是個壞詞了。 Availability 和好幾個 IT 常用的詞彙撞詞。要解釋這個詞之前必須先解釋他不是什麼:
這詞講的是 出塊者該發布的資料,是否如實發佈,且是否驗證發布的過程保有足夠的安全性。
因為出塊者該發布的資料會影響全節點,有沒有辦法就到上一個區塊以前的資料,推導出當下系統的全域狀態。如果沒有辦法的話,就相當於系統掉資料了,全域狀態,也就是所有的帳戶、餘額和儲存區,有些地方毀損,是災難性的後果。
曾經有人提倡使用資料發布(Data Publication)來取代 Data availability ,但似乎採用的人不夠多。
但本系列秉持冒險採用獵奇翻譯風格,拋磚引玉以提倡翻譯的創新,本文會使用 資料發布 來稱呼 DA。
資料發布的反面是資料窩藏。資料發布的問題就是一個資料窩藏的問題。
在現有的第一層和第二層系統,並沒有資料發布或資料窩藏的問題,或說已經充分的解決了。
在第一層系統中,全節點倚賴交易中的輸入資料來計算交易所代表的運算。全節點收下區塊的同時,也同時確保這些必須的資料都收到了。
早先的第二層系統,則是使用第一層的輸入資料,讓他們夾帶第二層系統上的交易。排序器必須在鏈上留下交易資料的雜湊值,來束縛交易的資料。驗算的過程會用這個雜湊值檢驗驗算的交易使否與當初發布的相同。
想解放頻寬的話,訂價策略是一個短期的思路。
用輸入資料的問題是,網路頻寬消耗的燃氣,與其他運算資源消耗的燃氣,競爭同一個區塊燃氣上限。這樣的問題是,如果 CPU 用得多的話,頻寬是沒被充分使用的。
近期用資料泡,以及分給資料泡專屬的燃氣定價,讓頻寬的使用率與定價獨立於其他運算資源。這讓捲捲們有更多便宜的資料可以用。
資料泡的設計是為了實現一個 2017 年的想法:分片(Sharding)。
分片是一個資料庫領域常見的策略:讓不同地域的資料庫分工儲存不同的資料,例如分亞洲、歐洲、美洲這樣。
但在點對點網路做分片意義不太一樣,的確有分工的部分,但就不是照地域分。
古早的分片是想做到 CPU 、頻寬、和儲存都分片,但如果要以捲為尊的話,分頻寬就夠。
要對頻寬分片的話,可以想像把點對點網路拆四個子網。我們給他們編號 0, 1, 2, 3 。
同時,系統要發布的資料也切成四份,分給四個子網。細節是這樣:有個比較強力的造塊者,造出一個攜帶大量資料的區塊。區塊中的資料切成四份。
對於 0 號子網的全節點,他會同步自己子網的全部資料。但其他三個子網的資料不能同步,不然就失去分片、分組、分工的意義了。
0 號子網的全節點去對其他子網的資料做「抽樣」是還可以接受的。只要這個頻寬的使用夠輕。
遊戲規則一:不能同步其他子網的資料
「為什麼 0 號子網的節點需要在乎其他子網的資料呢?不能每個子網的節點顧好自己的資料就好嗎?」特務 K 問。
「想像這個分片分到數百片或數千片的時候,每個子網的節點數會變小。相當於減少了備份的安全性。每個子網的資料,要讓其他子網有能力檢查,才不會讓壞人輕易攻陷某個小子網。」小雨說「這是之前規模化的遊戲規則:不能減損安全性。」
抽樣有其好處,但也有問題。抽樣可以讓 0 號子網的全節點,用很輕量的方式,檢查區塊中屬於其他子網的資料。但抽樣的方式只能保證該資料 90% 比例沒有問題。如果 3 號子網路的節點都被壞人壟斷,而出塊者窩藏 1% 的資料,仍然有辦法騙過其他好人佔據的子網路。
「難道我們不能以類似押金加檢舉的方式,處理窩藏資料的出塊者嗎?」特務 K 問。
「好問題,問題是窩藏資料是一種難以咎責的行為」小雨說。
咎責窩藏資料的困擾,在於窩藏資料資料的人可以即時釋出資料,否認窩藏的行為。如果有個負責處理檢舉的驗算程式,他其實沒有辦法區分到底是被檢舉人真的窩藏資料,還是檢舉人故意找碴。
2017 年的解決方案 是這樣:既然抽樣只能檢查到 90% 的資料有發布,那不如協議要求出塊者發布糾刪碼(Erasure Coding)編碼後的資料。
糾刪碼是一種神奇的編碼。經過糾刪碼編碼後的資料,可以任意消去某些部分。只要損失的資料低於一定的門檻,例如:仍有 50% 在,就能夠完整還原資料。
如果一個區塊可以被零號子網的節點收下,代表該區塊分派在其他子網的資料,已經至少有 90% 的部分發布出來。即使出塊者窩藏了 1%~10% ,零號子網可以透過糾刪碼去還原出原本區塊的資料。
這樣可以避免單一出塊者,或是單一子網被滲透而癱瘓整個網路。
特務 K 總結了一下:
「理論上是這樣沒錯,實際上節點間的溝通有一堆實務上的挑戰尚待解決」小雨說。
現今已有 2024 年 Dencun 升級引入的資料泡(提案: EIP4844,儀表板: https://blobscan.com/ )作為資料發布的載體,取代交易中的輸入資料欄位。但真正的資料分片,代號 PeerDAS,仍然在開發與測試當中(提案:EIP7594,會議)。